#include <algorithm>
#include <functional>
#include <vector>
using namespace std;
vector<vector<int>> merge(vector<vector<int>> &intervals) {
  // 按第一个元素升序排列
  sort(intervals.begin(), intervals.end(),
       [](vector<int> &v1, vector<int> &v2) { return v1[0] < v2[0]; });
  vector<vector<int>> res;
  for (int i = 0; i < intervals.size(); i++) {
    if (res.empty()) {
      res.push_back(intervals[i]);
    } else {
      vector<int> back = res.back();
      // 有重叠区域
      if (back[1] >= intervals[i][0]) {
        // 判断是否为子集
        if (back[1] < intervals[i][1]) {
          res.pop_back();
          res.push_back({back[0], intervals[i][1]});
        }

      } else {
        res.push_back(intervals[i]);
      }
    }
  }
  return res;
}

int main() {
  vector<vector<int>> nums{{{1, 3}, {2, 6}, {8, 10}, {15, 18}}};
  auto res = merge(nums);

  return 0;
}